{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>订单号</th>\n",
       "      <th>产品码</th>\n",
       "      <th>消费日期</th>\n",
       "      <th>产品说明</th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "      <th>城市</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>6/1/2020 9:09</td>\n",
       "      <td>五彩玫瑰五支装</td>\n",
       "      <td>32</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>6/1/2020 9:32</td>\n",
       "      <td>茉莉花白色25枝</td>\n",
       "      <td>48</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>6/1/2020 9:32</td>\n",
       "      <td>教师节向日葵3枝尤加利5枝</td>\n",
       "      <td>64</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>6/1/2020 9:37</td>\n",
       "      <td>百合粉色10花苞</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>6/1/2020 9:37</td>\n",
       "      <td>橙黄香槟色康乃馨</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      订单号     产品码           消费日期           产品说明  数量     单价    用户码  城市\n",
       "0  536374   21258  6/1/2020 9:09        五彩玫瑰五支装  32  10.95  15100  北京\n",
       "1  536376   22114  6/1/2020 9:32       茉莉花白色25枝  48   3.45  15291  上海\n",
       "2  536376   21733  6/1/2020 9:32  教师节向日葵3枝尤加利5枝  64   2.55  15291  上海\n",
       "3  536378   22386  6/1/2020 9:37       百合粉色10花苞  10   1.95  14688  北京\n",
       "4  536378  85099C  6/1/2020 9:37       橙黄香槟色康乃馨  10   1.95  14688  北京"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd #导入Pandas\n",
    "df_sales = pd.read_csv('易速鲜花订单记录.csv') #载入数据\n",
    "df_sales.head() #显示头几行数据 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt #导入Matplotlib的pyplot模块\n",
    "#构建月度的订单数的DataFrame\n",
    "df_sales['消费日期'] = pd.to_datetime(df_sales['消费日期']) #转化日期格式\n",
    "df_orders_monthly = df_sales.set_index('消费日期')['订单号'].resample('M').nunique() #每个月的订单数量\n",
    "#设定绘图的画布\n",
    "ax = pd.DataFrame(df_orders_monthly.values).plot(grid=True,figsize=(12,6),legend=False)\n",
    "ax.set_xlabel('月份') # X轴label\n",
    "ax.set_ylabel('订单数') # Y轴Label\n",
    "ax.set_title('月度订单数') # 图题\n",
    "#设定X轴月份显示格式\n",
    "plt.xticks(\n",
    "    range(len(df_orders_monthly.index)), \n",
    "    [x.strftime('%m.%Y') for x in df_orders_monthly.index], \n",
    "    rotation=45)\n",
    "plt.show() # 绘图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据清洗"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_sales = df_sales.drop_duplicates() #删除重复的数据行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "订单号     0\n",
       "产品码     0\n",
       "消费日期    0\n",
       "产品说明    0\n",
       "数量      0\n",
       "单价      0\n",
       "用户码     0\n",
       "城市      0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales.isna().sum() # NaN出现的次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>85920.000000</td>\n",
       "      <td>85920.000000</td>\n",
       "      <td>85920.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>10.115747</td>\n",
       "      <td>3.599711</td>\n",
       "      <td>15338.080389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>49.114285</td>\n",
       "      <td>134.410498</td>\n",
       "      <td>391.309086</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-9360.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14681.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.250000</td>\n",
       "      <td>15022.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.950000</td>\n",
       "      <td>15334.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>12.000000</td>\n",
       "      <td>3.750000</td>\n",
       "      <td>15673.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3114.000000</td>\n",
       "      <td>38970.000000</td>\n",
       "      <td>16019.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 数量            单价           用户码\n",
       "count  85920.000000  85920.000000  85920.000000\n",
       "mean      10.115747      3.599711  15338.080389\n",
       "std       49.114285    134.410498    391.309086\n",
       "min    -9360.000000      0.000000  14681.000000\n",
       "25%        2.000000      1.250000  15022.000000\n",
       "50%        4.000000      1.950000  15334.000000\n",
       "75%       12.000000      3.750000  15673.000000\n",
       "max     3114.000000  38970.000000  16019.000000"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales.describe() #df_sales的统计信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_sales = df_sales.loc[df_sales['数量'] > 0] #清洗掉数量小于等于0的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>84112.000000</td>\n",
       "      <td>84112.000000</td>\n",
       "      <td>84112.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>10.760236</td>\n",
       "      <td>3.005032</td>\n",
       "      <td>15337.732963</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>34.018906</td>\n",
       "      <td>15.365085</td>\n",
       "      <td>392.074855</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14681.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.250000</td>\n",
       "      <td>15021.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>1.950000</td>\n",
       "      <td>15333.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>12.000000</td>\n",
       "      <td>3.750000</td>\n",
       "      <td>15674.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3114.000000</td>\n",
       "      <td>3155.950000</td>\n",
       "      <td>16019.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 数量            单价           用户码\n",
       "count  84112.000000  84112.000000  84112.000000\n",
       "mean      10.760236      3.005032  15337.732963\n",
       "std       34.018906     15.365085    392.074855\n",
       "min        1.000000      0.000000  14681.000000\n",
       "25%        2.000000      1.250000  15021.000000\n",
       "50%        5.000000      1.950000  15333.000000\n",
       "75%       12.000000      3.750000  15674.000000\n",
       "max     3114.000000   3155.950000  16019.000000"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales.describe() #df_sales的统计信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>订单号</th>\n",
       "      <th>产品码</th>\n",
       "      <th>消费日期</th>\n",
       "      <th>产品说明</th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "      <th>城市</th>\n",
       "      <th>总价</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>2020-06-01 09:09:00</td>\n",
       "      <td>五彩玫瑰五支装</td>\n",
       "      <td>32</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100</td>\n",
       "      <td>北京</td>\n",
       "      <td>350.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>2020-06-01 09:32:00</td>\n",
       "      <td>茉莉花白色25枝</td>\n",
       "      <td>48</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>165.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>2020-06-01 09:32:00</td>\n",
       "      <td>教师节向日葵3枝尤加利5枝</td>\n",
       "      <td>64</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>163.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>2020-06-01 09:37:00</td>\n",
       "      <td>百合粉色10花苞</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>19.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>2020-06-01 09:37:00</td>\n",
       "      <td>橙黄香槟色康乃馨</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>19.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      订单号     产品码                消费日期           产品说明  数量     单价    用户码  城市  \\\n",
       "0  536374   21258 2020-06-01 09:09:00        五彩玫瑰五支装  32  10.95  15100  北京   \n",
       "1  536376   22114 2020-06-01 09:32:00       茉莉花白色25枝  48   3.45  15291  上海   \n",
       "2  536376   21733 2020-06-01 09:32:00  教师节向日葵3枝尤加利5枝  64   2.55  15291  上海   \n",
       "3  536378   22386 2020-06-01 09:37:00       百合粉色10花苞  10   1.95  14688  北京   \n",
       "4  536378  85099C 2020-06-01 09:37:00       橙黄香槟色康乃馨  10   1.95  14688  北京   \n",
       "\n",
       "      总价  \n",
       "0  350.4  \n",
       "1  165.6  \n",
       "2  163.2  \n",
       "3   19.5  \n",
       "4   19.5  "
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales['总价'] = df_sales['数量'] * df_sales['单价'] #计算每单的总价\n",
    "df_sales.head() #显示头几行数据  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 构建User用户表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>975</th>\n",
       "      <td>16015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>976</th>\n",
       "      <td>16016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>977</th>\n",
       "      <td>16017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>978</th>\n",
       "      <td>16018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>979</th>\n",
       "      <td>16019</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>980 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码\n",
       "0    14681\n",
       "1    14682\n",
       "2    14684\n",
       "3    14687\n",
       "4    14688\n",
       "..     ...\n",
       "975  16015\n",
       "976  16016\n",
       "977  16017\n",
       "978  16018\n",
       "979  16019\n",
       "\n",
       "[980 rows x 1 columns]"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = pd.DataFrame(df_sales['用户码'].unique()) #生成以用户码为主键的结构df_user\n",
    "df_user.columns = ['用户码'] #设定字段名\n",
    "df_user = df_user.sort_values(by='用户码',ascending=True).reset_index(drop=True) #按用户码排序\n",
    "df_user #显示df_user"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 求R值: 新进度，代表自用户上次消费以来的天数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值\n",
       "0  14681   70\n",
       "1  14682  187\n",
       "2  14684   25\n",
       "3  14687  106\n",
       "4  14688    7"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales['消费日期'] = pd.to_datetime(df_sales['消费日期']) #转化日期格式\n",
    "df_recent_buy = df_sales.groupby('用户码').消费日期.max().reset_index() #构建消费日期信息\n",
    "df_recent_buy.columns = ['用户码','最近日期'] #设定字段名\n",
    "df_recent_buy['R值'] = (df_recent_buy['最近日期'].max() - df_recent_buy['最近日期']).dt.days #计算最新日期与上次消费日期的天数\n",
    "df_user = pd.merge(df_user, df_recent_buy[['用户码','R值']], on='用户码') #把上次消费距最新日期的天数（R值）合并至df_user结构\n",
    "df_user.head() #显示df_user头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 求F值: 消费频率，代表用户是否频繁使用服务"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值\n",
       "0  14681   70    7\n",
       "1  14682  187    2\n",
       "2  14684   25  390\n",
       "3  14687  106   15\n",
       "4  14688    7  324"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_frequency = df_sales.groupby('用户码').消费日期.count().reset_index() #计算每个用户消费次数，构建df_frequency对象\n",
    "df_frequency.columns = ['用户码','F值'] #设定字段名称\n",
    "df_user = pd.merge(df_user, df_frequency, on='用户码') #把消费频率整合至df_user结构\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 求M值: 消费金额，代表用户在一段时间内消费的总金额"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值\n",
       "0  14681   70    7   498.95\n",
       "1  14682  187    2    52.00\n",
       "2  14684   25  390  1201.51\n",
       "3  14687  106   15   628.38\n",
       "4  14688    7  324  5579.10"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_revenue = df_sales.groupby('用户码').总价.sum().reset_index() #根据消费总额，构建df_revenue对象\n",
    "df_revenue.columns = ['用户码','M值'] #设定字段名称\n",
    "df_user = pd.merge(df_user, df_revenue, on='用户码') #把消费金额整合至df_user结构\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
